  import java.awt.event.ActionEvent; 
  import java.awt.event.ActionListener; 
  import javax.swing.JButton; 
  import javax.swing.JFrame; 

  /** 
    This program demonstrates how an action listener can access 
    a variable from a surrounding block. 
 */ 
 public class InvestmentViewer1 
 { 
    public static void main(String[] args) 
    { 
       JFrame frame = new JFrame(); 
 
       // The button to trigger the calculation 
       JButton button = new JButton(Add Interest); 
       frame.add(button); 
 
       // The application adds interest to this bank account 
       final BankAccount account = new BankAccount(INITIAL_BALANCE); 
 
       class AddInterestListener implements ActionListener 
       { 
          public void actionPerformed(ActionEvent event) 
          { 
             // The listener method accesses the account variable 
             // from the surrounding block 
             double interest = account.getBalance() 
                   * INTEREST_RATE / 100; 
             account.deposit(interest); 
             System.out.println(balance:  + account.getBalance()); 
          } 
       } 
 
       ActionListener listener = new AddInterestListener(); 
       button.addActionListener(listener); 38 
       frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
    } 

    private static final double INTEREST_RATE = 10; 
    private static final double INITIAL_BALANCE = 1000; 
 
    private static final int FRAME_WIDTH = 120; 
    private static final int FRAME_HEIGHT = 60; 
 } 
